home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / tds / convsrc / m2amiga2msg.mod < prev    next >
Text File  |  1995-11-01  |  2KB  |  90 lines

  1. (*
  2.  * M2Amiga2Msg
  3.  * Error converter M2Amiga/TDS - ©1994 by Matthias Bock (public domain)
  4.  * Bugs? Suggestions? Write to starfox@incubus.sub.org
  5.  *)
  6.  
  7. MODULE M2Amiga2Msg;
  8.  
  9. FROM SYSTEM IMPORT ADR;
  10. FROM Arts IMPORT Assert;
  11. FROM InOut IMPORT WriteString,WriteInt,WriteLn,Read;
  12. FROM Conversions IMPORT StrToVal;
  13. FROM String IMPORT CopyPart,Concat;
  14. FROM ASCII IMPORT ht,lf; (* horizontal tab *)
  15. FROM FileSystem IMPORT Lookup,Close,File,ReadChar,Response;
  16.  
  17. FROM DosL IMPORT System,DeleteFile;
  18. FROM DosD IMPORT SysTags;
  19. FROM UtilityD IMPORT tagEnd;
  20.  
  21. TYPE
  22.   String=ARRAY SHORTCARD OF CHAR;
  23.  
  24. PROCEDURE ReadLn(VAR file:File; VAR string:ARRAY OF CHAR; VAR l:INTEGER);
  25.   VAR
  26.     char:CHAR;
  27.     cPtr:POINTER TO CHAR;
  28.   BEGIN
  29.     string[0]:=0C;
  30.     cPtr:=ADR(string);
  31.     l:=0;
  32.     REPEAT
  33.       ReadChar(file,char);
  34.       cPtr^:=char;
  35.       INC(cPtr);
  36.       INC(l);
  37.     UNTIL (char=lf) OR file.eof;
  38.     cPtr^:=0C;
  39.     DEC(l);
  40.   END ReadLn;
  41.  
  42. VAR
  43.   name,string:String;
  44.   long,longMem:LONGINT;
  45.   pos,parent,length:INTEGER;
  46.   dummy,which:BOOLEAN;
  47.   switch:ARRAY BOOLEAN OF String; (* 2 lines of buffer *)
  48.   char:CHAR;
  49.   file:File;
  50.  
  51. BEGIN
  52.   
  53.   (* Get full(!) name of file *)
  54.   REPEAT
  55.     REPEAT Read(char) UNTIL char=">"; Read(char);
  56.     name:=""; pos:=0;
  57.     REPEAT Read(char); name[pos]:=char; INC(pos) UNTIL char=lf;
  58.     name[pos-1]:=0C;
  59.     Read(char);
  60.   UNTIL char<>"(";
  61.   (* Call M2Error *)
  62.   string:="M2:M2Error ";
  63.   Concat(string,name); Concat(string," >T:M2Amiga2Msg.tmp");
  64.   long:=System(ADR(string),NIL);
  65.   
  66.   (* Convert the errors *)
  67.   Lookup(file,"T:M2Amiga2Msg.tmp",16384,FALSE);
  68.   Assert(file.res=done,ADR("M2Amiga2Msg: FileError"));
  69.   length:=0; which:=TRUE; switch[TRUE]:=""; switch[FALSE]:="";
  70.   REPEAT
  71.     parent:=length;
  72.     ReadLn(file,switch[which],length);
  73.     IF switch[which][0]=ht THEN
  74.       pos:=0; WHILE switch[~which][pos]=" " DO INC(pos) END;
  75.       CopyPart(string,switch[~which],pos,5-pos);
  76.       longMem:=long; StrToVal(string,long,dummy,10,dummy);
  77.       IF long=0 THEN long:=longMem END;
  78.       pos:=2; WHILE switch[which][pos]<>"^" DO INC(pos) END;
  79.       ReadLn(file,switch[which],length);
  80.       CopyPart(string,switch[which],9,length-9);
  81.       WriteString("<"); WriteString(name); WriteString("> ");
  82.       WriteInt(long,0); WriteString(" "); WriteInt(pos,0); 
  83.       WriteString(" E <"); WriteString(string); WriteString(">"); WriteLn;
  84.     END;
  85.     which:=~which;
  86.   UNTIL (length=0)&(parent=0);
  87.   Close(file);
  88.   IF DeleteFile(ADR("T:M2Amiga2Msg.tmp")) THEN END;
  89. END M2Amiga2Msg.
  90.